package intermouse;

import java.util.Iterator;
import java.util.List;

/**
 * Étel osztály
 * 
 * @author Sőre András, Demény Fruzsina Gyöngyi
 * @version 1.0
 * @since 2013-03-24
 */
public class Food extends FieldObject {
	
	public Food() {
		super();
		dead = false;
		fieldType = FieldTypes.Food;
	}
	/**
	 * @param a hangya referenciája
	 * @return visszaadja hogy hangya léphet-e az adott ételt tartalmazó mezőre
	 */
	@Override
	public boolean canStep(Ant ant){
		Logger.printToConsole(">> Food.canStep() : boolean");
		if (ant.getWanderMoves()==0) {
			this.setDead(true);
			ant.eats();
			
			//törölni kell egy FoodSmell-t is a field-ről azzal együtt mi is döglünk
			//hogy melyiket töröljük az mindegy
			Iterator<Smell> it = this.field.getSmells().iterator();
			while (it.hasNext()) {
				Smell fo = it.next();
				if (!fo.deodorantReaction())
				{
					TestCommandParser.log("FoodSmell vanishes at " + this.field.toString() + ".");
					it.remove();
					break;
				}
			}
			
			//a kaja körül levő szagok törlése
			List<Field> adj;//kiindulĂł mezĹ‘ szomijai
			 adj=this.field.getAdjacentFields();
			 
			 Iterator<Field> iterator=adj.iterator();
			 while(iterator.hasNext())
			 {
				 Field ffff =  iterator.next();
				 Iterator<Smell> adjit = ffff.getSmells().iterator();
					while (adjit.hasNext()) {
						Smell fooo = adjit.next();
						if (!fooo.deodorantReaction())
						{
							TestCommandParser.log("FoodSmell vanishes at " + this.field.toString() + ".");
							adjit.remove();
							ffff.setDirty();
							break;
						}
					}
			 }
			 
			field.setDirty();
			
			TestCommandParser.log("Ant eats at " + this.field.toString() +", " +this.field.getFoodCount() +" food remains.");
		}
		Logger.printToConsole("<< return");
		return false;
	}
	/**
	 * @return Igazat ad vissza, felülírja az ősosztály metódusát.
	 */
	@Override
	public boolean isFood(){
		Logger.printToConsole(">> Food.isFood() : boolean");
		Logger.printToConsole("<< return");
		return true;
	}
	
	public void setField(Field field)
	{
		 super.setField(field);
		 this.field.addSmell(new FoodSmell());
		 
		 List<Field> adj;//kiindulĂł mezĹ‘ szomijai
		 adj=field.getAdjacentFields();
		 
		 Iterator<Field> iterator=adj.iterator();
		 while(iterator.hasNext())
		 {
			 iterator.next().addSmell(new FoodSmell());
		 }
	}
}
